package dao;

import java.util.List;

import hbt.HbtUtil;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import bean.PedidoVO;
import bean.RemitoVO;

public class HbtPedidoDao {

		private static HbtPedidoDao instancia = null;
		private static SessionFactory sf = null;

		public static HbtPedidoDao getInstancia() {
			if (instancia == null) {
				sf = HbtUtil.getSessionFactory();
				instancia = new HbtPedidoDao();
			}
			return instancia;
		}

		public void guardarPedido(PedidoVO pedido) {
			Session session = sf.openSession();
			session.beginTransaction();
			session.persist(pedido);
			session.flush();
			session.getTransaction().commit();
			session.close();
		}

		public PedidoVO obtenerPedido(PedidoVO p) {
			Session session = sf.openSession();
			Transaction trans = session.beginTransaction();
			PedidoVO Pedido = (PedidoVO) session.get(
					PedidoVO.class, p.getNro());
			trans.commit();
			session.close();
			return Pedido;
		}
		
		@SuppressWarnings("unchecked")
		public List<PedidoVO> buscarPedidosNroCte(List<Integer> numeros, String cuit) {
			Session session = sf.openSession();
			session.beginTransaction();
			Query q = session.createQuery("from PedidoVO p where p.nroPedido in :nros and p.cliente.cuit =:cuit");
			q.setParameter("cuit", cuit);
			q.setParameterList("nros", numeros);
			List <PedidoVO> pedidos = q.list();
			session.close();
			return pedidos;
		}

		public void guardarRemito(RemitoVO r) {
			Session session = sf.openSession();
			session.beginTransaction();
			session.persist(r);
			session.flush();
			session.getTransaction().commit();
			session.close();
		}

}
